#include <cmath>

#include "Sphere.h"

using namespace std;


bool Sphere::intersectLocal( const ray& r, isect& i ) const
{
	Vec3d pos = r.getPosition(); //posicion 
	Vec3d dir = r.getDirection(); //direccion

	
	// producto punto	
	double posDir = -(pos*dir);


	double disc = posDir*posDir - pos*pos + 1;
	
	if(disc < 0) return false;

	disc = sqrt(disc);
	double t1 = posDir - disc; //distancia de interseccion 1
	double t2 = posDir + disc; //distancia de interseccion 2


	if(t2 <= RAY_EPSILON) return false;
	

	i.obj = this;

	//Tomamos el primero 
	//si t1 > RAY_EPSILON t=t1 sino t =t0
	double t = ((t1 > RAY_EPSILON)? t1 : t2);    

	i.setT(t);
	
	//normalizamos
	Vec3d aux = r.at(i.t);
	aux.normalize();
	i.setN(aux);
	return true;
}

